// 引入存储到cookie的函数
import { getToken, setToken, removeToken, setTimeStamp } from '@/utils/auth'

// 引入请求登录的api
import { getUserInfo, login, getUserDetailById } from '@/api/user'

import { Message } from 'element-ui'

// 状态
const state = {
  token: getToken(), // token
  userInfo: {} // 用户信息
}

// 修改state
const mutations = {
  //  设置token  放入缓存中
  setToken(state, token) {
    state.token = token
    setToken(token)
  },

  //  移除token  删除缓存
  removeToken(state) {
    state.token = null // 删除vuex的token
    removeToken() // 先清除 vuex  再清除缓存 vuex和 缓存数据的同步
  },

  // 设置用户信息
  setUserInfo(state, result) {
    state.userInfo = result
  },

  // 移除用户信息
  removeUserInfo(state) {
    state.userInfo = {}
  }
}

// 异步的请求
const actions = {
  // 登录请求
  async login(context, data) {
    // 这里直接就返回了token了   在响应拦截器处理过了
    const result = await login(data)
    setTimeStamp() // 设置时间戳
    context.commit('setToken', result)
    Message.success('登录成功')
  },

  // 获取用户的信息
  async getUserInfo(context) {
    const result = await getUserInfo()
    // 获取的用户详情信息
    const baseInfo = await getUserDetailById(result.userId)

    // 合并两个数据
    context.commit('setUserInfo', { ...result, ...baseInfo })

    return result
  },

  // 退出操作
  logout(context) {
    // 移除token
    context.commit('removeToken')
    // 移除用户信息
    context.commit('removeUserInfo')
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
